package homework2.client;



import homework2.common.CommandType;
import homework2.common.Message;
import homework2.utils.Tool;

import java.io.ObjectInputStream;
import java.net.Socket;

/**
 * @author 韩顺平
 * @version 1.0
 */
public class ClientConnectServerThread extends Thread {
    //该线程需要持有Socket
    private Socket socket;

    //构造器可以接受一个Socket对象
    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    //
    @Override
    public void run() {
        //因为Thread需要在后台和服务器通信，因此我们while循环
        while (true) {

            try {
                System.out.println("客户端线程，等待读取从服务器端发送的消息");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                //如果服务器没有发送Message对象,线程会阻塞在这里
                Message message = (Message) ois.readObject();
                //注意，后面我们需要去使用message
                //判断这个message类型，然后做相应的业务处理
                //如果是读取到的是 服务端返回的在线用户列表
                if (CommandType.USER_LIST.equals(message.getCommandType())){
                    //如果服务器没有发送Message对象,线程会阻塞在这里
                    String[] onlineUsers = message.getContent().split(" ");
                    System.out.println("\n=======当前在线用户列表========");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户: " + onlineUsers[i]);
                    }
                }
                else if (CommandType.TARGET.equals(message.getCommandType()) || CommandType.ALL.equals(message.getCommandType())){

                    // 根据文件类型处理文件
                    if ("xml".equals(message.getContentType())) {
                        // 接收XML数据并保存到文件
                        Tool.saveToFile(Tool.decryptFileContent(message.getFileBytes()), Client.recDirPath + message.getUserId() + "-" + message.getGetter() +"temp.xml");
                        System.out.println("用户" + message.getUserId() + "发生的XML文件保存成功!");
                    } else if ("json".equals(message.getContentType())) {
                        // 接收JSON数据并保存到文件
                        Tool.saveToFile(Tool.decryptFileContent(message.getFileBytes()), Client.recDirPath + message.getUserId() + "-" + message.getGetter() +  "temp.json");
                        System.out.println("用户" + message.getUserId() + "发生的JSON文件保存成功!");
                    }
                }
                else if (CommandType.SHOW.equals(message.getCommandType())){
                    System.out.println("in");
                    byte[] datas = Tool.decryptFileContent(message.getFileBytes());
                    String content = new String(datas);
                    System.out.println(content);

                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }

    //为了更方便的得到Socket
    public Socket getSocket() {
        return socket;
    }
}
